package cn.tedu.mall.service;

import cn.tedu.mall.mapper.ItemCatMapper;
import cn.tedu.mall.pojo.ItemCat;
import cn.tedu.mall.vo.EasyUITree;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;

@Service
public class ItemCatServiceImpl implements ItemCatService{
    @Autowired
    private ItemCatMapper itemCatMapper;

    @Override
    public String findItemCatName(Long itemCatId) {
        //业务：基于商品分类id，去获取商品分类的名称
        ItemCat itemCat = itemCatMapper.selectById(itemCatId);
        //获取商品分类的名称
        return itemCat.getName();
    }

    /**
     * 业务实现分析：
     * 基于parentId所查询到的节点对象是ItemCat类型的对象---pojo
     *在业务中，基于parentId所获取到节点对象是EasyUITree类型---vo
     * 所以需要我们将ItemCat类型的对象转换成EasyUITree类型的对象
     * @param parentId 请求参数
     * @return List<EasyUITree>
     */

    @Override
    public List<EasyUITree> findTreeByParentId(Long parentId) {
        //1.通过该方法getItemCatList()基于parentId获取子级节点
        List<ItemCat> itemCatList=getItemCatList(parentId);
        //2.声明一个List<EasyUITree>集合
        List<EasyUITree> treeList=new ArrayList<>(itemCatList.size());
        //3.将pojo（ItemCat）转换成vo（EasyUITree）
        for (ItemCat itemCat:itemCatList) {
            //如果是父级节点就关闭，如果是子级节点就打开
            String state=itemCat.getIsParent()?"closed":"open";
            //创建EasyUITree对象
            EasyUITree tree=new EasyUITree();
            tree.setId(itemCat.getId()).setText(itemCat.getName()).setState(state);
            treeList.add(tree);
        }
        return treeList;
    }
    @Autowired
    private Jedis jedis;
    @Override
    public List<EasyUITree> findItemcatListByCache(Long parentId) {
        String key="cn.tedu.mall.service.ItemCatServiceImpl.findItemcatListByCache::+parentId";
        String json = jedis.get(key);
        if (StringUtils.isEmpty(json)){
            findTreeByParentId(parentId);
        }
    }

    private List<ItemCat> getItemCatList(Long parentId) {
        QueryWrapper<ItemCat> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("parent_id",parentId);
        return itemCatMapper.selectList(queryWrapper);
    }
}
